package com.xjrsoft.module.erpModel.caseErpCustomer.service.impl;

import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.xjrsoft.common.enums.YesOrNoEnum;
import com.xjrsoft.module.erpModel.caseErpCustomer.dto.AddCaseErpCustomerContactsDto;
import com.xjrsoft.module.erpModel.caseErpCustomer.dto.CaseErpCustomerContactsDto;
import com.xjrsoft.module.erpModel.caseErpCustomer.dto.UpdateCaseErpCustomerContactsDto;
import com.xjrsoft.module.erpModel.caseErpCustomer.entity.CaseErpCustomer;
import com.xjrsoft.module.erpModel.caseErpCustomer.entity.CaseErpCustomerContacts;
import com.xjrsoft.module.erpModel.caseErpCustomer.mapper.CaseErpCustomerContactsMapper;
import com.xjrsoft.module.erpModel.caseErpCustomer.mapper.CaseErpCustomerMapper;
import com.xjrsoft.module.erpModel.caseErpCustomer.service.ICaseErpCustomerContactsService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.xjrsoft.module.erpModel.caseErpCustomer.vo.CaseErpCustomerContactsInfoVo;
import com.xjrsoft.module.erpModel.caseErpLog.entity.CaseErpLog;
import com.xjrsoft.module.erpModel.caseErpLog.service.ICaseErpLogService;
import com.xjrsoft.module.organization.entity.User;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

/**
 * <p>
 * 客户联系人【case_erp_customer_contacts】 服务实现类
 * </p>
 *
 * @author hnyyzy
 * @since 2023-07-11
 */
@Service
@AllArgsConstructor
public class CaseErpCustomerContactsServiceImpl extends ServiceImpl<CaseErpCustomerContactsMapper, CaseErpCustomerContacts> implements ICaseErpCustomerContactsService {
    private final ICaseErpLogService caseErpLogService;

    private final CaseErpCustomerMapper caseErpCustomerMapper;

    @Override
    public Boolean add(AddCaseErpCustomerContactsDto dto) {
        if (CollectionUtil.isNotEmpty(dto.getCaseErpCustomerContactsDtoList())){
            for (CaseErpCustomerContactsDto caseErpCustomerContactsDto : dto.getCaseErpCustomerContactsDtoList()) {
                //如果新增的客户联系人是默认联系人，就将其它的设置为非默认联系人,并且修改customer表里面对应的字段
                if (caseErpCustomerContactsDto.getIsDefault() == YesOrNoEnum.YES.getCode()){
                    List<CaseErpCustomerContacts> list = this.list(Wrappers.<CaseErpCustomerContacts>query().lambda()
                            .eq(CaseErpCustomerContacts::getCustomerId, dto.getCustomerId()).eq(CaseErpCustomerContacts::getIsDefault, YesOrNoEnum.YES.getCode()));
                    CaseErpCustomer caseErpCustomer = new CaseErpCustomer();
                    caseErpCustomer.setId(dto.getCustomerId());
                    if (StrUtil.isNotBlank(caseErpCustomerContactsDto.getName())){
                        caseErpCustomer.setDefaultName(caseErpCustomerContactsDto.getName());
                    }
                    if (StrUtil.isNotBlank(caseErpCustomerContactsDto.getPhone())){
                        caseErpCustomer.setDefaultPhone(caseErpCustomerContactsDto.getPhone());
                    }
                    if (StrUtil.isNotBlank(caseErpCustomerContactsDto.getDept())){
                        caseErpCustomer.setDefaultDep(caseErpCustomerContactsDto.getDept());
                    }
                    if (StrUtil.isNotBlank(caseErpCustomerContactsDto.getPost())){
                        caseErpCustomer.setDefaultPost(caseErpCustomerContactsDto.getPost());
                    }
                    caseErpCustomerMapper.updateById(caseErpCustomer);
                    if (list.size()>0){
                        for (CaseErpCustomerContacts caseErpCustomerContacts : list) {
                            caseErpCustomerContacts.setIsDefault(YesOrNoEnum.NO.getCode());
                        }
                        this.updateBatchById(list);
                    }
                }
            }
            List<CaseErpCustomerContacts> caseErpCustomerContactsList = BeanUtil.copyToList(dto.getCaseErpCustomerContactsDtoList(), CaseErpCustomerContacts.class);
            for (CaseErpCustomerContacts caseErpCustomerContacts : caseErpCustomerContactsList) {
                caseErpCustomerContacts.setCustomerId(dto.getCustomerId());
            }
            this.saveBatch(caseErpCustomerContactsList);
        }

        CaseErpLog log = new CaseErpLog();
        log.setKeyId(dto.getCustomerId());
        log.setCategoryId(0);
        log.setExecuteResultJson("新增客户联系人");
        caseErpLogService.save(log);

        return true;
    }

    @Override
    public Boolean update(UpdateCaseErpCustomerContactsDto dto) {
        //如果修改的客户联系人是默认联系人，就将其它的设置为非默认联系人,并且修改customer表里面对应的字段
        if (dto.getIsDefault() == YesOrNoEnum.YES.getCode()){
            List<CaseErpCustomerContacts> list = this.list(Wrappers.<CaseErpCustomerContacts>query().lambda()
                    .eq(CaseErpCustomerContacts::getCustomerId, dto.getCustomerId()).eq(CaseErpCustomerContacts::getIsDefault, YesOrNoEnum.YES.getCode()));
            CaseErpCustomer caseErpCustomer = new CaseErpCustomer();
            caseErpCustomer.setId(dto.getCustomerId());
            if (StrUtil.isNotBlank(dto.getName())){
                caseErpCustomer.setDefaultName(dto.getName());
            }
            if (StrUtil.isNotBlank(dto.getPhone())){
                caseErpCustomer.setDefaultPhone(dto.getPhone());
            }
            if (StrUtil.isNotBlank(dto.getDept())){
                caseErpCustomer.setDefaultDep(dto.getDept());
            }
            if (StrUtil.isNotBlank(dto.getPost())){
                caseErpCustomer.setDefaultPost(dto.getPost());
            }
            caseErpCustomerMapper.updateById(caseErpCustomer);
            if (list.size()>0){
                for (CaseErpCustomerContacts caseErpCustomerContacts : list) {
                    caseErpCustomerContacts.setIsDefault(YesOrNoEnum.NO.getCode());
                }
                this.updateBatchById(list);
            }
        }

        CaseErpCustomerContacts caseErpCustomerContacts = BeanUtil.toBean(dto, CaseErpCustomerContacts.class);
        caseErpCustomerContacts.setCustomerId(dto.getCustomerId());
        this.updateById(caseErpCustomerContacts);

        CaseErpLog log = new CaseErpLog();
        log.setKeyId(dto.getCustomerId());
        log.setCategoryId(0);
        log.setExecuteResultJson("修改客户联系人");
        caseErpLogService.save(log);

        return null;
    }

    @Override
    public List<CaseErpCustomerContactsInfoVo> info(List<CaseErpCustomerContacts> caseErpCustomerContactsList,  List<User> userList) {
        List<CaseErpCustomerContactsInfoVo> caseErpCustomerContactsInfoVoList = new ArrayList<>();
        for (CaseErpCustomerContacts caseErpCustomerContacts : caseErpCustomerContactsList) {
            CaseErpCustomerContactsInfoVo caseErpCustomerContactsInfoVo = BeanUtil.toBean(caseErpCustomerContacts, CaseErpCustomerContactsInfoVo.class);
            User user = userList.stream().filter(x -> x.getId().equals(caseErpCustomerContacts.getCreateUserId())).findFirst().orElse(new User());
            if (StrUtil.isNotBlank(user.getName())){
                caseErpCustomerContactsInfoVo.setCreateUserName(user.getName());
            }
            caseErpCustomerContactsInfoVoList.add(caseErpCustomerContactsInfoVo);
        }
        return caseErpCustomerContactsInfoVoList;
    }
}
